"""
编写一个用户注册小程序，要求用户在控制台输入“ID”、“EMAIL地址”、“身份证号”、“姓名”。要求：
ID长度不能超过8位，且只能由数字、字母、下划线组成
EMAIL地址要求符合基本电子邮件格式
身份证号要求符合基本格式
姓名只能中文且不能超过4位
以上操作均不能用正则表达式
验证合法后输出用户的所有信息，要求在信息中体现出性别。
"""


def is_valid_id(user_id):
    """
    验证ID是否合法
    ID长度不能超过8位，且只能由数字、字母、下划线组成
    """
    if not (1 <= len(user_id) <= 8):
        return False
    for char in user_id:
        if not (
            "0" <= char <= "9"
            or "a" <= char <= "z"
            or "A" <= char <= "Z"
            or char == "_"
        ):
            return False
    return True


def is_valid_email(email):
    """
    验证EMAIL地址是否符合基本电子邮件格式
    """
    if "@" not in email or "." not in email:
        return False
    parts = email.split("@")
    if len(parts) != 2:
        return False
    if not parts[1]:
        return False
    domain_parts = parts[1].split(".")
    if len(domain_parts) < 2:
        return False
    return True


def is_valid_id_card(id_card):
    """
    验证身份证号是否符合基本格式
    """
    if len(id_card) != 18:
        return False
    if not id_card[:17].isdigit():
        return False
    try:
        int(id_card[17])  # 验证最后一位是否是数字
    except ValueError:
        if id_card[17] != "X":
            return False
    return True


def is_valid_name(name):
    """
    验证姓名是否合法
    姓名只能中文且不能超过4位
    """
    if not (1 <= len(name) <= 4):
        return False
    for char in name:
        if not ("\u4e00" <= char <= "\u9fff"):  # 汉字的Unicode范围
            return False
    return True


def get_gender_from_id_card(id_card):
    """
    从身份证号中获取性别
    """
    if len(id_card) != 18:
        return "未知"
    try:
        gender_code = int(id_card[16]) % 2
        if gender_code == 0:
            return "女"
        else:
            return "男"
    except ValueError:
        return "未知"


def register():
    """
    用户注册程序
    """
    user_id = input("请输入ID (长度不超过8位，只能由数字、字母、下划线组成): ")
    while not is_valid_id(user_id):
        print("ID不合法，请重新输入")
        user_id = input("请输入ID: ")

    email = input("请输入EMAIL地址: ")
    while not is_valid_email(email):
        print("EMAIL地址不合法，请重新输入")
        email = input("请输入EMAIL地址: ")

    id_card = input("请输入身份证号: ")
    while not is_valid_id_card(id_card):
        print("身份证号不合法，请重新输入")
        id_card = input("请输入身份证号: ")

    name = input("请输入姓名 (中文，不超过4位): ")
    while not is_valid_name(name):
        print("姓名不合法，请重新输入")
        name = input("请输入姓名: ")

    gender = get_gender_from_id_card(id_card)

    print("\n用户注册信息:")
    print(f"ID: {user_id}")
    print(f"EMAIL: {email}")
    print(f"身份证号: {id_card}")
    print(f"姓名: {name}")
    print(f"性别: {gender}")


if __name__ == "__main__":
    register()
